জেনেরিক্স এবং এর ব্যবহার

জেনেরিক্স (Generics) হলো সি#-এর একটি শক্তিশালী ফিচার, যা ডেটা টাইপ নির্দিষ্ট না করে কোডের মডুলারিটি এবং পুনঃব্যবহারযোগ্যতা বাড়ায়। জেনেরিক্স ব্যবহার করে একই ক্লাস, মেথড, ডেলিগেট বা ইন্টারফেসকে একাধিক ডেটা টাইপের জন্য ব্যবহার করা যায়। এটি টাইপ-সেফটি বজায় রাখে এবং রানটাইম ত্রুটি প্রতিরোধ করে।

কেন জেনেরিক্স ব্যবহার করবেন?

  • টাইপ-সেফটি: জেনেরিক্স ব্যবহার করে কম্পাইল টাইমে টাইপ চেকিং নিশ্চিত করা যায়, ফলে রানটাইম ত্রুটি কম হয়।
  • কোড পুনঃব্যবহারযোগ্যতা: একই কোড একাধিক টাইপের সাথে কাজ করতে পারে।
  • বেটার পারফরম্যান্স: জেনেরিক্স ব্যবহার করলে বক্সিং ও আনবক্সিং এড়ানো যায়, যা মেমোরি ব্যবস্থাপনা উন্নত করে।

জেনেরিক্সের ব্যবহার

১. জেনেরিক ক্লাস

জেনেরিক ক্লাস ব্যবহার করে এমন একটি ক্লাস তৈরি করা যায় যা একাধিক টাইপের সাথে কাজ করতে পারে।

csharp

Copy code

public class MyGenericClass<T>
{
    private T data;

    public MyGenericClass(T value)
    {
        data = value;
    }

    public T GetData()
    {
        return data;
    }
}

উদাহরণ: জেনেরিক ক্লাস ব্যবহার করা

var intObj = new MyGenericClass<int>(10);
Console.WriteLine("Integer Value: " + intObj.GetData());

var stringObj = new MyGenericClass<string>("Hello");
Console.WriteLine("String Value: " + stringObj.GetData());

এখানে MyGenericClass<T> ক্লাসটি int এবং string দুই ধরনের ডেটা টাইপের সাথে কাজ করতে সক্ষম।


২. জেনেরিক মেথড

জেনেরিক মেথডের মাধ্যমে একটি মেথড তৈরি করা যায় যা একাধিক টাইপের ইনপুট গ্রহণ করতে পারে।

public class MyGenericMethods
{
    public void Display<T>(T data)
    {
        Console.WriteLine("Data: " + data);
    }
}

উদাহরণ: জেনেরিক মেথড ব্যবহার করা

MyGenericMethods myGeneric = new MyGenericMethods();
myGeneric.Display<int>(100);
myGeneric.Display<string>("Hello Generics");

এখানে Display মেথডটি int এবং string উভয় ধরনের ইনপুট গ্রহণ করেছে।


৩. জেনেরিক ইন্টারফেস

জেনেরিক ইন্টারফেস ব্যবহার করে ইন্টারফেসের ডেটা টাইপ নির্দিষ্ট করা যায়।

public interface IRepository<T>
{
    void Add(T item);
    T Get(int id);
}

উদাহরণ: জেনেরিক ইন্টারফেস ইমপ্লিমেন্ট করা

public class EmployeeRepository : IRepository<Employee>
{
    private List<Employee> employees = new List<Employee>();

    public void Add(Employee employee)
    {
        employees.Add(employee);
    }

    public Employee Get(int id)
    {
        return employees.FirstOrDefault(e => e.ID == id);
    }
}

এখানে IRepository<T> ইন্টারফেসে Employee টাইপ ব্যবহার করা হয়েছে।


৪. জেনেরিক কনস্ট্রেইন্ট (Generic Constraints)

জেনেরিক কনস্ট্রেইন্ট ব্যবহার করে নির্দিষ্ট ধরনের ডেটা টাইপ কেবলমাত্র গ্রহণ করা যায়।

public class MyGenericClass<T> where T : class
{
    public T Data { get; set; }
}

where T : class কনস্ট্রেইন্ট ব্যবহার করে কেবলমাত্র রেফারেন্স টাইপ (ক্লাস) গ্রহণ করা হচ্ছে। অন্যান্য কনস্ট্রেইন্টগুলো:

  • where T : struct - কেবলমাত্র ভ্যালু টাইপ গ্রহণ করা।
  • where T : class - কেবলমাত্র রেফারেন্স টাইপ গ্রহণ করা।
  • where T : new() - একটি ডিফল্ট কনস্ট্রাক্টর থাকতে হবে এমন টাইপ গ্রহণ করা।
  • where T : BaseClass - নির্দিষ্ট বেস ক্লাস বা ইন্টারফেসকে ইনহেরিট করা টাইপ গ্রহণ করা।

বক্সিং এবং আনবক্সিং এড়াতে জেনেরিক্সের ব্যবহার

সি# এ জেনেরিক্স ব্যবহারে বক্সিং এবং আনবক্সিং এড়ানো যায়, ফলে মেমোরি ব্যবস্থাপনা উন্নত হয় এবং পারফরম্যান্স ভালো হয়।

List<int> numbers = new List<int>();
numbers.Add(10); // এখানে বক্সিং বা আনবক্সিং এর প্রয়োজন নেই

বিল্ট-ইন জেনেরিকস ক্লাসসমূহ

সি# এ কিছু গুরুত্বপূর্ণ জেনেরিক ক্লাস রয়েছে যা ডেটা স্ট্রাকচার এবং কালেকশন পরিচালনায় সহায়ক। যেমন:

  • List<T>: এক ধরনের ডাইনামিক অ্যারে।
  • Dictionary<TKey, TValue>: কী-ভ্যালু পেয়ার ভিত্তিক ডেটা সংরক্ষণ।
  • Queue<T>: FIFO (First-In-First-Out) ভিত্তিক ডেটা স্ট্রাকচার।
  • Stack<T>: LIFO (Last-In-First-Out) ভিত্তিক ডেটা স্ট্রাকচার।

উদাহরণ: List<T> ব্যবহার করা

List<string> names = new List<string> { "Alice", "Bob", "Charlie" };
names.Add("David");
names.ForEach(name => Console.WriteLine(name));

উদাহরণ: Dictionary<TKey, TValue> ব্যবহার করা

Dictionary<int, string> studentGrades = new Dictionary<int, string>();
studentGrades[1] = "A";
studentGrades[2] = "B";
Console.WriteLine(studentGrades[1]); // Output: A

সংক্ষেপে

  1. জেনেরিক ক্লাস: একাধিক টাইপের সাথে কাজ করার জন্য একটি ক্লাস তৈরি করা।
  2. জেনেরিক মেথড: একটি মেথড তৈরি করা যা একাধিক টাইপের ইনপুট গ্রহণ করতে পারে।
  3. জেনেরিক ইন্টারফেস: ইন্টারফেসকে জেনেরিকভাবে ডিজাইন করা যাতে বিভিন্ন টাইপের জন্য ব্যবহার করা যায়।
  4. কনস্ট্রেইন্টস: নির্দিষ্ট টাইপের উপর শর্ত আরোপ করা।

সি# এ জেনেরিক্সের ব্যবহার কোডকে আরও সংক্ষিপ্ত, টাইপ-সেফ, এবং পুনঃব্যবহারযোগ্য করে তোলে। এটি ডেটা স্ট্রাকচার এবং কালেকশন পরিচালনায় সহায়ক এবং জটিল সফটওয়্যার অ্যাপ্লিকেশন তৈরি করতে অপরিহার্য।

Content added By

আরও দেখুন...

Promotion